﻿using System;
using System.ServiceModel;
using System.Security.Permissions;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract
{
    //Task  : 5617 
    // Data : 13/03/2009
    // Autor:Apsilva
    /// <summary>
    /// Contrato de servico IDescontoCliente
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.ServicoCorretagem.Service.ServiceContract", Name = "IDescontoCliente", SessionMode = SessionMode.Allowed)]

    public interface IDescontoCliente
    {
        /// <summary>
        ///  Serviço irá Alterar o DescontoCliente informado como parâmetro.
        //  Transacional: Não
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarDescontoCliente")]
        void AlterarDescontoCliente(DataContract.Request.DescontoClienteRequest  request);


        /// <summary>
        /// Serviço irá Alterar uma coleção de DescontoClientes informados como parâmetro.
        /// Transacional: Sim
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [TransactionRequired]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarDescontoClientes")]
        void AlterarDescontoClientes(List <DataContract.Request.DescontoClienteRequest> request);

        /// <summary>
        ///  Serviço irá Consultar uma lista de DescontoClientes, utilizando o parâmetro informado.
        ///  Transacional: Nao
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarDescontosClientes")]
        List<DataContract.Response.DescontoClienteResponse> ConsultarDescontosClientes(DataContract.Request.FiltroDescontoClienteRequest request);

        /// <summary>
        /// Serviço irá Excluir o DescontoCliente informado como parâmetro.
        /// Transacional: Nao.
        /// </summary>
        /// <param name="inclusaoList"></param>
        /// <param name="exclusaoList"></param>
        /// <param name="alteracaoList"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [TransactionRequired]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirDescontoCliente")]
        void ExcluirDescontoCliente(DataContract.Request.FiltroDescontoClienteRequest request);

        /// <summary>
        /// Serviço irá Excluir uma coleção de DescontoClientes informados como parâmetro.
        /// Transacional: Sim
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [TransactionRequired]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirDescontoClientes")]
        void ExcluirDescontoClientes(List<DataContract.Request.FiltroDescontoClienteRequest> request);


        /// <summary>
        /// Serviço irá excluir/incluir/alterar os objetos DescontoCliente informados como parâmetro.
        /// Transacional:Sim
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [TransactionRequired]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExecutarTransacoesDescontoCliente")]
        void ExecutarTransacoesDescontoCliente(List<DataContract.Request.DescontoClienteRequest> inclusaoList, List<DataContract.Request.FiltroDescontoClienteRequest> exclusaoList, List<DataContract.Request.DescontoClienteRequest> alteracaoList);

        /// <summary>
        /// Serviço irá Incluir o DescontoCliente informado como parâmetro.
        /// Transacional: Nao
        /// </summary>
        /// <param name="requestList"></param>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]

        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirDescontoCliente")]
        void IncluirDescontoCliente(DataContract.Request.DescontoClienteRequest request);

        /// <summary>
        ///  Serviço irá Obter o Desconto informado como parâmetro
        ///  Transacional: Sim
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationLog]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.GeneralFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.BusinessFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.ValidationFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.InvalidSessionFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.LicensingFault))]
        [FaultContract(typeof(Sinacor.Infra.Common.Exceptions.FaultContracts.AccessIsDeniedFault))]
        [TransactionRequired]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirDescontoClientes")]
        void IncluirDescontoClientes(List<DataContract.Request.DescontoClienteRequest> request);


    }
}
